/**
 ***********************************************************************************************************
 * 
 ***********************************************************************************************************
 * @file RBVertexDeclaration.h
 ***********************************************************************************************************/

#ifndef __RBVERTEXDECLARATION_H__
#define __RBVERTEXDECLARATION_H__

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBVertexDeclaration.h)
#endif

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBHardwareBuffer.h"
#include "RBStream.h"

/***********************************************************************************************************
 * Forward declarations
 ***********************************************************************************************************/
class RBVertexElement;

/***********************************************************************************************************
 * Classes
 ***********************************************************************************************************/

class RBVertexDeclaration : public RBHardwareBuffer
{
    RBDeclareRTTI(RBVertexDeclaration, RBHardwareBuffer);
    RBDeclareHBSerializable(RBVertexDeclaration);
public:
				        RBVertexDeclaration     (RBHardwareBufferManager* pHBMgr, RBVertexElement* pElements, uint32 uiElementCount, void* pNative);
    virtual            ~RBVertexDeclaration     ();

    uint32              GetElementCount         ();

    RBVertexElement*    GetElements             ();
    uint32              ComputeVertexSize       ();

private:

    RBVertexElement*    m_pElements;
    uint32              m_uiElementCount;
};

RBDeclareSmartPointer(RBVertexDeclaration);

/***********************************************************************************************************/

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
inline uint32 RBVertexDeclaration::GetElementCount()
{
    return m_uiElementCount;
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
inline RBVertexElement* RBVertexDeclaration::GetElements()
{
    return m_pElements;
}

#endif // __RBVERTEXDECLARATION_H__
